package com.pangus.toolkits.files;

import com.pangus.toolkits.files.model.FileLink;
import com.pangus.toolkits.files.result.StorageInfo;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * @author yingheng chen
 * @description 客户端所有操作
 * @date 2019/11/30
 */
public interface FSAPI {
    /**
     * 获取系统存储相关信息
     * @return {@link StorageInfo}系统存储相关信息
     */
    StorageInfo getStorageInfo() throws IOException;

    /**
     * 获取一个file link,通过这个对象进行下载，修改,查看信息
     * @param serverFilePath 服务器文件绝对路径
     * @return {@link FileLink},用于对文件操作
     */
    FileLink fileLink(@Nonnull String serverFilePath) throws IOException;



    /**
     * 同步上传到服务器
     * @param file 上传的文件对象
     * @param serverDir 服务器文件夹绝对路径,空时为根路径
     * @return {@link FileLink},用于对文件操作
     */
    FileLink upload(@Nonnull File file, @Nullable String serverDir) throws IOException;

    /**
     * 同步上传到服务器
     *
     * @param filePath  上传的文件路径，可以为绝对或相对路径
     * @param serverDir 服务器文件夹绝对路径
     * @return {@link FileLink},用于对文件操作
     */
    FileLink upload(@Nonnull String filePath, @Nullable String serverDir) throws IOException;

    /**
     * 获取文件夹下的所有{@link FileLink}
     * @param serverDir 服务器文件夹绝对路径
     * @return {@link FileLink},用于对文件操作
     */
    List<FileLink> fileLinkList(@Nonnull String serverDir) throws IOException;
}
